import { mergeOptions } from '../utils/index'

export function initGloApi(Vue) {
  Vue.options = {};
  // vue 会所有的方法合并成数组  create:[createdA,createB,(全局的create方法)createC(组件的create方法)]
  Vue.mixin = function (mixin) {
    // 对象合并
    this.options = mergeOptions(this.options, mixin);
  }

  // 存放全局组件
  Vue.options.components = {};
  Vue.component = function (id, componentDef) {
    // 获取组件名称
    componentDef.name = componentDef.name || id;
    // Vue创建组件的核心 Vue.extend方法
    componentDef = this.extend(componentDef);
    this.options.components[id] = componentDef;
  }
  // 返回一个组件实例
  Vue.extend = function (options) {
    let spuer = this;
    const Sub = function vueComponent(opts) {
      // 初始化
      this._init(opts)
    }
    // 继承父组件的属性
    Sub.prototype = Object.create(spuer.prototype);
    // 子组件this指向
    Sub.prototype.constructor = Sub;
    // 父组件属性合并到子组件中
    Sub.options = mergeOptions(this.options, options);
    return Sub;
  }
}